package com.candy.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Set;

import javax.sound.midi.Soundbank;




public class DBHelper {
	
	public static Connection getConn() {
		Connection conn=null;
		try {
//			注册或实例化驱动	
			Class.forName("com.mysql.cj.jdbc.Driver");
//			获取数据的链接对象
//			数据库的连接串
//			jdbc:mysql使用jdbc链接mysql数据库
//			localhost要连接的数据库的ip地址，此处的localhost表示本机，等价与127.0.0.1
//			3306表示mysql的端口号
//			database_name：表示要链接的数据库的名字
			String url="jdbc:mysql://localhost:3306/usermanager? characterEncoding=utf8 & useSSL=false & serverTimezone=UTC & rewriteBatchedStatements=true";
//			数据库的用户名
			String username="root";
//			数据库的密码
			String userpwd="123456";
			conn=DriverManager.getConnection(url,username,userpwd);
				
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return conn;
						
	}
	/**
	 * 封装查询操作
	 * @param sql要执行的sql语句
	 * @param ob 传递的参数
	 * @return 数据最终转储的内容
	 */
	public static LinkedList<LinkedHashMap<String, Object>> query(String sql,Object...ob) {		
		LinkedList<LinkedHashMap<String, Object>> datalist=null;
		try {
			Connection conn=getConn();
			PreparedStatement ment=conn.prepareStatement(sql);
			for (int i = 0; i < ob.length; i++) {
				ment.setObject(i+1, ob[i]);
			}
			
//			准备一个存储数据的容器
			datalist=new LinkedList<LinkedHashMap<String,Object>>();
			LinkedHashMap<String, Object> eachRow=null;
			
//			获取查询结果集
			ResultSet re=ment.executeQuery();
//			获取元数据
			ResultSetMetaData rm=re.getMetaData();
//			获取数据表中共有多少列
			int count=rm.getColumnCount();
			while(re.next()) {
//				实例化存储每一行信息的map
				eachRow=new LinkedHashMap<String, Object>();
//				遍历处理
				for (int i = 1; i <= count; i++) {
//					存入数据
//					rm.getColumnLabel(i)获取该列的列名
//					re.getObject(rm.getColumnLabel(i))通过列名获取该列的值
					eachRow.put(rm.getColumnLabel(i), re.getObject(rm.getColumnLabel(i)));
				}
				datalist.add(eachRow);
			}
			
//			关闭资源
			re.close();
			ment.close();
			conn.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return datalist;
		
	}
	
	public static int update(String sql,Object...ob) {
		int num=0;
		try {

			Connection conn=getConn();
			
			//			获取数据库发送指令的装置
			PreparedStatement ment=conn.prepareStatement(sql);
//			给参数设置要传递的值
			for (int i = 0; i < ob.length; i++) {
				ment.setObject(i+1, ob[i]);
			}	
			num=ment.executeUpdate();
//			关闭资源

			ment.close();
			conn.close();

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return num;
	
	}
	
	

}
